<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>Document</title>
  <script src="lib/vue.js"></script>
</head>
<body>
  <div id="app">
    <parent-com></parent-com>
  </div>
</body>
<template id="parent">
  <div>
    <h1>父组件</h1>
    <!-- 
      父组件在调用子组件的地方，添加自定义属性
      属性的值就是父组件要传递给子组件的值
      如果属性的值是一个变量，boolean类型或者是number类型，需要使用绑定属性
     -->
    <child-com test="测试" :count="count" :num="100" :flag="true"></child-com>
  </div>
</template>
<template id="child">
  <div>
    <h3>子组件</h3>
    <p>{{test}}</p>
    <p>{{count}}</p>
    <p>{{num}}</p>
    <p>{{flag}}</p>
  </div>
</template>
<script>
  // 谁用谁注册
  const childCom = {
    // 在子组件定义的地方，添加一个props选项，用来接收父组件传递的数据
    // 1.数据接收的第一种方式就是数组方式，数组的元素就是自定义的属性名
    // 就可以在子组件中使用通过自定义的属性名显示数据
    // 2.数据接收的第二种方式就是对象方式，
    // key值为自定义的属性名，value值为数据类型，用于校验用户传值是否合适
    // props: ['test', 'count', 'num', 'flag'],
    props: {
      test: String,
      count: Number,
      num: String, // 本身是Number，注意观察控制台的红色警告信息
      flag: Boolean
    },
    template: '#child'
  }
  const ParentCom = {
    template: '#parent',
    data () {
      return {
        count: 100000
      }
    },
    components: {
      childCom // 对象内部 key 和value相同且value值是一个变量，可以采用简写形式 
    }
  }
  new Vue({
    el: '#app',
    components: {
      ParentCom: ParentCom
    }
  })
</script>
</html>